#define VAR_PAGE_GLOBALS
#include "page.h"
#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <string.h>
#include "esp_wifi.h"
#include "esp_system.h"
#include "esp_event.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_heap_caps.h"
#include "esp_log.h"
#include "button.h"
#include "led_strip.h"
#include "driver/rmt.h"
#include "lvgl.h"
#include "ui.h"

static const char *TAG = "page";
/**************************************************************/
#include<stdio.h>
#include<stdlib.h>
// #define MaxSize 5

// struct
// {
//     lv_obj_t *Data[MaxSize];   // 存储元素的数组
//     int topIdx;       //栈顶指针
// } pageStack;


// // 将元素推入栈中
// int push_page(lv_obj_t *page)
// {
//     // 栈已满
//     if (pageStack.topIdx == MaxSize - 1)
//     {
//         return 0;
//     }
//     // 加入栈中
//     pageStack.topIdx++;
//     pageStack.Data[pageStack.topIdx] = page;
//     // 返回自身
//     return 1;
// }
// // 移除栈顶元素
// lv_obj_t *pop_page()
// {
//     // 栈空
//     if (pageStack.topIdx == 0)
//     {
//         //返回失败
//         return 0;
//     }
//     // 打印并返回栈
//     return pageStack.Data[--pageStack.topIdx];
// }

// // 获取栈顶元素 不移除
// lv_obj_t *get_top_page()
// {
//     // 栈空
//     if (pageStack.topIdx == 0)
//     {
//         //返回失败
//         return 0;
//     }
//     // 打印并返回栈
//     return pageStack.Data[pageStack.topIdx - 1];
// }

// void page_show_pre()
// {
//     ESP_LOGI(TAG, "show pre");
//     lv_obj_t *x = pop_page();
//     lv_disp_load_scr(x);
// }
///////////////////////////////////////////////////////////////////

// void btn_back(void *p)
// {
//     if (wait_key_value(&keyValue, 0) == pdTRUE)
//     {
//         if (keyValue == 6)
//         {
//             page_show_pre();
//         }
//     }
// }

void page_init()
{
    lv_init();
    lv_port_disp_init();
    button_init();
    group = lv_group_create();
    lv_indev_set_group(lv_port_indev_init(), group);
    xTaskCreate(lv_thread, "lv_thread", 4096, NULL,2, NULL);
    // lv_timer_create(&btn_back, 30,0);
}

void lv_thread()
{
    while (1)
    {
        lv_task_handler();
        vTaskDelay(10 / portTICK_RATE_MS);
        lv_tick_inc(10);
    }
}



//******************************************smart config*********************************//

lv_obj_t *msgboxPage;
// 关闭消息框
static void msg_event_cb(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if (code == LV_EVENT_KEY)
    {
        lv_obj_t *obj = lv_event_get_current_target(e);
        if (obj == msgboxPage)
        {
            lv_msgbox_close(msgboxPage);
            msgboxPage = 0;
            // page_show_pre();
        }
    }
}

void msgbox_quit()
{
    ESP_LOGI(TAG, "msgbox quit");
    if (msgboxPage)
    {
        lv_msgbox_close(msgboxPage);
        msgboxPage = 0;
    }
    // if (get_top_page() == ui_scPage)
    // {
    //     pop_page();
    // }
}
static const char *btns[] = {"Close", ""};
void show_smart_config_ok()
{
    // msgboxPage = lv_msgbox_create(NULL, "Smart Config", "Successful!", btns, false);
    // lv_obj_add_event_cb(msgboxPage, msg_event_cb, LV_EVENT_KEY, NULL);
    // lv_group_remove_all_objs(group);

    // lv_obj_center(msgboxPage);
    // // push_page(msgboxPage);
    // lv_group_add_obj(group, lv_msgbox_get_btns(msgboxPage));
    ESP_LOGI(TAG, "show smart OK");
}
void show_smart_config_fail()
{
    // msgboxPage = lv_msgbox_create(NULL, "Smart Config", "Failed!", btns, false);
    // lv_obj_add_event_cb(msgboxPage, msg_event_cb, LV_EVENT_KEY, NULL);
    // lv_group_remove_all_objs(group);
    // lv_group_add_obj(group, lv_msgbox_get_btns(msgboxPage));
    // lv_obj_center(msgboxPage);
    // push_page(msgboxPage);
    ESP_LOGI(TAG, "show smart Failed");
}

// void show_smart_config_wait()
// {
//     btn_smart_config_start();
//     lv_group_remove_all_objs(group);
//     lv_scr_load(msgboxPage);
//     push_page(waitPage);
// }


//////////////////////////////////////////////////////////////////////////

